#include <HTTPClient.h>
#include <Arduino.h>
#include <Audio.h>

#include "app_bd_tts.h"
#include "app_baidu_authen.h"


#if 1

String tts_url = TTS_URL;
String tts_token;
//String g_encodedText = "小吴真是一条狗啊！";
String g_encodedText = "";//待作为TTS输入的文本（本工程中，由INMP441-->ASR--->转换而来）

//Audio audio;
Audio audio(false,0x04,1);// 尝试设置为 IIS1,而不是IIS0

void tts_get_response(const String & m_encodedText) {
  const char *headerKeys[] = { "Content-Type", "Content-Length" };
  // 5、修改百度语音助手的token
  //以下内容各自代表什么意思？
  //url += "?tok=24.e169f864a91715325118.282335-57722200";//这个是什么？
  tts_url += "?tok=" + tts_token;
  tts_url += "&tex=" + m_encodedText;
  tts_url += "&lan=zh";
  tts_url += "&ctp=1";
  tts_url += "&cuid=esp32s3"; //这里是不是应该改？？？？（用户唯一标识，用来计算UV值。建议填写能区分用户的机器 MAC 地址或 IMEI 码，长度为60字符以内）

  //以下为选填选项
  tts_url += "&per=" + String(PER);
  tts_url += "&spd=" + String(SPD);
  tts_url += "&pit=" + String(PIT);
  tts_url += "&vol=" + String(VOL);
  tts_url += "&aue=" + String(AUE);

  HTTPClient http;

  //Serial.print("URL: ");
  //Serial.println(url);

  http.begin(tts_url);
  http.collectHeaders(headerKeys, 2);
  int httpResponseCode = http.GET();
  if (httpResponseCode > 0) {
    if (httpResponseCode == HTTP_CODE_OK) {
      Serial.print("Content-Type = ");
      Serial.println(http.header("Content-Type"));
      String contentType = http.header("Content-Type");
      if (contentType.startsWith("audio")) 
      {
        Serial.println("合成成功，返回的是音频文件");
        // 处理音频文件，保存到SD卡或者播放
        //但是此处并没有进行处理？？？
      } 
      else if (contentType.equals("application/json")) 
      {
        Serial.println("合成出现错误，返回的是JSON文本");
        // 处理错误信息，根据需要进行相应的处理
      } else 
      {
        Serial.println("未知的Content-Type");
        // 可以添加相应的处理逻辑
      }
    } else {
      Serial.println("Failed to receive audio file");
    }
  } else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  http.end();
}



void tts_player() {
  // WiFi.mode(WIFI_STA);
  // wifiMulti.addAP(ssid.c_str(), password.c_str());
  // wifiMulti.run();
  // if(WiFi.status() != WL_CONNECTED){
  //     WiFi.disconnect(true);
  //     wifiMulti.run();
  // }
  const char *host_url = tts_url.c_str(); //其中url是 申请的链接
  audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
  audio.setVolume(21);        // 0...21
  audio.connecttohost(host_url);  //  128k mp3 //host 为 https://tsn.baidu.com/text2audio
  
}


void tts_loop(void)
{
    audio.loop();

    #if 1
    if (Serial.available()) {  // put streamURL in serial monitor
    audio.stopSong();
    String r = Serial.readString();
    r.trim();
    if (r.length() > 5) audio.connecttohost(r.c_str());
    log_i("free heap=%i", ESP.getFreeHeap());
  }
  #endif
}

#endif